import java.io.*;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Map;

/**
 * @author zhang peng yang ming
 * @CopyRight (C) http://www.csdn.com
 * @brief
 * @email 122162005@qq.com
 * @date 2018-07-13
 */
public class TestFifth {
//    1.提供一个方法将传入该方法的任意对象转变成json格式字符串反射(json字符串格式：{"username":"rose", "password":"123456"} )（30分）
//    2.编写一个程序可以将A路径下的文件拷贝到B路径下（30分）
    public static void main(String[] args) throws IllegalAccessException {
//        System.out.println(javaBean2Json(new Hero()));
        try {
//            copy("E:\\workplace\\kehongborui\\day33\\web\\helloworld.htm", "E:\\workplace\\kehongborui\\day33\\web\\helloworld.bak.htm");
            copy("C:\\Users\\admin\\Desktop\\mysql-5.5.25-win32.msi", "C:\\Users\\admin\\Desktop\\mysql.msi");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * java 普通对象转 json
     * @param o
     * @return
     */
    public static String javaBean2Json(Object o) throws IllegalAccessException {
        if (o instanceof Map) {
            // TODO
        } else if (o instanceof Collection) {
            // TODO
        }

        StringBuffer buffer = new StringBuffer("{");
        // 1.获取类对象
        Class clazz = o.getClass();
        // 2. 获取所有 filed
        Field[] fieldList = clazz.getDeclaredFields();
        // 3. 根据所获取到的field 去获取对应 value
        for (int i = 0; i < fieldList.length; i++) {
            // 设置 私有属性对外可见
            fieldList[i].setAccessible(true);

            buffer.append("\"");
            buffer.append(fieldList[i].getName());
            buffer.append("\"");
            buffer.append(" : ");

            buffer.append("\"");
            buffer.append(fieldList[i].get(o));
            buffer.append("\"");
            // 如果 不是最后一个字段，那么都需要加  ，
            if (i != fieldList.length - 1) {
                buffer.append(", ");
            }
        }

        buffer.append("}");

        return buffer.toString();
    }

    /**
     * 文件复制
     * @param source 源文件路径
     * @param target 目标路径
     */
    public static void copy(String source, String target) throws IOException {
        FileInputStream fis = new FileInputStream(source);  // 读取文件
        FileOutputStream fos = new FileOutputStream(target);  // 写文件

        byte[] cache = new byte[1024 * 10];
        int len = 0;
        while ((len = fis.read(cache)) != -1) {
            // byte b[], int off, int len
            fos.write(cache, 0, len);
        }
        // 关闭流
        fis.close();
        fos.close();
    }

    /**
     * 文件复制
     * @param source 源文件路径
     * @param target 目标路径
     */
    public static void copy2(String source, String target) throws IOException {
        InputStreamReader isr = new InputStreamReader(new FileInputStream(source));
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(target));  // 写文件

        char[] cache = new char[1024 * 10];
        int len = 0;
        while ((len = isr.read(cache)) != -1) {
            // byte b[], int off, int len
            osw.write(cache, 0, len);
        }
        // 关闭流
        isr.close();
        osw.close();
    }
}

class Hero {
    /**
     * 英雄的名称
     */
    private String name;
    /**
     * 英雄出生地
     */
    private String address;
    /**
     * 英雄年龄
     */
    int age = 100;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
